# -*- coding:utf-8 -*-
# 类属性（类变量）、对象属性（对象变量）

class TestClass:
    sex = 'male' # 类变量定义（声明+赋值）
    hobit = 'Movie'
    def __init__(self, name, age):
        self.name = name # 对象变量
        self.age = age
        self.sex = 'female' # 此处也是对象变量，不是类变量（个人理解：新定义一个对象变量）
        # self.变量  在寻找变量时，优先寻找对象变量，不存在时再寻找类变量
    def __del__(self):
        print('对象消失了')
tClass = TestClass('GC', 18)
print(tClass.name, tClass.age, tClass.sex) # GC 18 female
print(TestClass.sex) # male

# 对象变量特殊定义方式：通过实例化的对象定义
tClass.home = 'HB'
print(tClass.home) # HB

# 无法通过定义同名变量的方式修改类变量
tClass.hobit = 'Film' # 实际是新增了一个对象变量，没有修改类变量的值
print(TestClass.hobit) # Movie

# 变量删除 使用del 可以删除类变量和对象变量(存在同名的类变量和对象变量时，会删除对象变量，不会删除类变量)
del tClass.age
del TestClass.sex
try:
    print(tClass.age)
except AttributeError as e:
    print(e) # 'TestClass' object has no attribute 'age'

try:
    print(TestClass.sex)
except AttributeError as e:
    print(e) # type object 'TestClass' has no attribute 'sex'
